#include "app_dev_config.h"

#define LOG_TAG              "dev/info"
#include <drv_log.h>

dev_config dev_config_info_default = {
																{//LAN_INFO
																	0,
																	80,
																	"192.168.1.101",
																	"192.168.1.1",
																	"255.255.255.0",
																},	
																{//MODBUS_SERVER_INFO
																	0,
																	0,
																	"192.168.1.101",
																	502,
																},	
																{//MODBUS_RTU_INFO
																	0,
																	0,
																	9600,
																},
																{//NET_CONFIG
																	0,
																	RT_TRUE,
																	RT_TRUE,
																	RT_TRUE,
																	"njytt",
																	"1qaz2wsx!",
																},
																
															};	

dev_config dev_config_info = {
																{//LAN_INFO
																	0,
																	80,
																	"192.168.1.101",
																	"192.168.1.1",
																	"255.255.255.0",
																},	
																{//MODBUS_SERVER_INFO
																	0,
																	0,
																	"192.168.1.101",
																	502,
																},	
																{//MODBUS_RTU_INFO
																	0,
																	0,
																	9600,
																},
																{//NET_CONFIG
																	0,
																	RT_TRUE,
																	RT_TRUE,
																	RT_TRUE,
																	"njytt",
																	"1qaz2wsx!",
																},
																
															};	
/*******************************************************************************
* Function Name  : check_lan_config_data
* Description    : 检查LAN口配置信息
* Input          : lan_config_data data
* Output         : None
* Return         : RT_ERRCODE
* Attention		   : None
*******************************************************************************/
int check_lan_config_data(lan_config lan) 
{
	char ip[20] = {0};
	rt_uint32_t port = 0;
	int ip1,ip2,ip3,ip4;
	port = lan.port;
	if(port>65535)
	{
		return RT_ERROR;
	}
	
	rt_strncpy(ip,(const char*)lan.ip,20);
	
	sscanf(ip,"%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4);
	
	if((ip1 > 255)||(ip2 > 255)||(ip3 > 255)||(ip4 > 255))
	{
		return RT_ERROR;
	}
	
	rt_strncpy(ip,(const char*)lan.gateway,20);
	
	sscanf(ip,"%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4);
	
	if((ip1 > 255)||(ip2 > 255)||(ip3 > 255)||(ip4 > 255))
	{
		return RT_ERROR;
	}
	
	rt_strncpy(ip,(const char*)lan.subnet,20);
	
	sscanf(ip,"%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4);
	
	if((ip1 > 255)||(ip2 > 255)||(ip3 > 255)||(ip4 > 255))
	{
		return RT_ERROR;
	}
	
	return RT_EOK;
}

///*******************************************************************************
//* Function Name  : check_remote_server_config_data
//* Description    : 检查远程服务器地址信息
//* Input          : const char*
//* Output         : None
//* Return         : None
//* Attention		   : None
//*******************************************************************************/
//int check_remote_server_config_data(remote_server_config data) 
//{
//	char ip[20] = {0};
//	rt_uint32_t port = 0;
//	int ip1,ip2,ip3,ip4;
//	port = data.port;
//	if(port>65535)
//	{
//		return RT_ERROR;
//	}
//	
//	rt_strncpy(ip,(const char*)data.ip,20);
//	
//	sscanf(ip,"%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4);
//	
//	if((ip1 > 255)||(ip2 > 255)||(ip3 > 255)||(ip4 > 255))
//	{
//		return RT_ERROR;
//	}
//	return RT_EOK;
//}

/*******************************************************************************
* Function Name  : check_modbus_server_config_data
* Description    : 检查modbus远程服务器地址信息
* Input          : const char*
* Output         : None
* Return         : None
* Attention		   : None
*******************************************************************************/
int check_modbus_server_config_data(modbus_tcp_config data) 
{
	char ip[20] = {0};
	rt_uint32_t port = 0;
	int ip1,ip2,ip3,ip4;
	port = data.port;
	
	if(data.slave_id > 65535)
	{
		return RT_ERROR;
	}
	
	if(port>65535)
	{
		return RT_ERROR;
	}
	
	rt_strncpy(ip,(const char*)data.ip,20);
	
	sscanf(ip,"%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4);
	
	if((ip1 > 255)||(ip2 > 255)||(ip3 > 255)||(ip4 > 255))
	{
		return RT_ERROR;
	}
	return RT_EOK;
}


/*******************************************************************************
* Function Name  : read_dev_config
* Description    : 读取设备信息
* Input          : const char*
* Output         : None
* Return         : None
* Attention		   : None
*******************************************************************************/
void read_dev_config(void)
{
	dev_config dev_flash = {0};
	dev_config_info = dev_config_info_default;
	
	//获取LAN端口配置信息
	if(ef_get_env_blob("lan_info",&dev_flash.lan,LAN_INFO_SIZE,RT_NULL) == LAN_INFO_SIZE)
	{
		if(dev_flash.lan.magic_word == MAGIC_WORD)
		{
			LOG_I("获取LAN配置参数成功！\n");
			dev_config_info.lan = dev_flash.lan;
		}
		else
		{
			LOG_W("获取LAN默认参数成功！\n");
		}
	}
	else
	{
		LOG_E("获取LAN参数失败！\n");
	}
	
	
//	//获取远程服务器地址
//	if(ef_get_env_blob("remote_server_info",&dev_config_info.server,REMOTE_SERVER_INFO_SIZE,RT_NULL) == REMOTE_SERVER_INFO_SIZE)
//	{
//		if(dev_config_info.server.magic_word == MAGICWORD)
//		{
//			LOG_I("获取远程服务器配置地址信息成功！\n");
//		}
//		else
//		{
//			LOG_W("获取远程服务器默认地址信息成功！\n");
//		}
//	}
//	else
//	{
//		LOG_E("获取服远程务器地址信息失败！\n");
//	}	
//	
	//获取MODBUS-TCP服务器地址
	if(ef_get_env_blob("modbus_tcp_info",&dev_config_info.modbus_tcp,MODBUS_TCP_INFO_SIZE,RT_NULL) == MODBUS_TCP_INFO_SIZE)
	{
		if(dev_config_info.modbus_tcp.magic_word == MAGIC_WORD)
		{
			LOG_I("获取MODBUS-TCP服务器配置地址信息成功！\n");
		}
		else
		{
			LOG_W("获取MODBUS-TCP服务器默认地址信息成功！\n");
		}
	}
	else
	{
		LOG_E("获取MODBUS-TCP服务器地址信息失败！\n");
	}	
	
		//获取MODBUS-RTU服务器地址
	if(ef_get_env_blob("modbus_rtu_info",&dev_config_info.modbus_rtu,MODBUS_RTU_INFO_SIZE,RT_NULL) == MODBUS_RTU_INFO_SIZE)
	{
		if(dev_config_info.modbus_tcp.magic_word == MAGIC_WORD)
		{
			LOG_I("获取MODBUS-RTU服务器配置地址信息成功！\n");
		}
		else
		{
			LOG_W("获取MODBUS-RTU服务器默认地址信息成功！\n");
		}
	}
	else
	{
		LOG_E("获取MODBUSTCP服务器地址信息失败！\n");
	}	

	if(ef_get_env_blob("vol_gain",&dev_flash.vol_gain,VOL_GAIN_INFO_SIZE,RT_NULL) == VOL_GAIN_INFO_SIZE)
	{
		if(dev_flash.vol_gain.magic_word == MAGIC_WORD)
		{
			dev_config_info.vol_gain = dev_flash.vol_gain;
		}
	}
	
	if(ef_get_env_blob("cur_gain",&dev_flash.cur_gain,CUR_GAIN_INFO_SIZE,RT_NULL) == CUR_GAIN_INFO_SIZE)
	{
		if(dev_flash.cur_gain.magic_word == MAGIC_WORD)
		{
			dev_config_info.cur_gain = dev_flash.cur_gain;
		}
	}
	
	if(ef_get_env_blob("cur_offset",&dev_flash.cur_offset,VOL_OFFSET_INFO_SIZE,RT_NULL) == VOL_OFFSET_INFO_SIZE)
	{
		if(dev_flash.cur_offset.magic_word == MAGIC_WORD)
		{
			dev_config_info.cur_offset = dev_flash.cur_offset;
		}
	}
	
}
